# 第一阶段使用 layertools 的 extract 命令将应用程序拆分为多个层  本次构建标记为builder
FROM adoptopenjdk/openjdk11:latest as builder
WORKDIR /application

ARG JAR_FILE=./*.jar
COPY ${JAR_FILE} app.jar
RUN java -Djarmode=layertools -jar app.jar extract


#Spring Boot的fat jar如果能拆分成一层一层构建，把重复的层从主机缓存中复用起来就可以大大提高效率。所以按照变动的频率 Spring Boot应用可以划分如下的层级：
#dependencies （依赖项一般变化不大）
#spring-boot-loader（spring boot 加载器变化也不大）
#snapshot-dependencies （快照依赖，为快照版本的依赖，更新迭代的会快一些）
#application （业务层，也就是我们最频繁变动的）

#  第二阶段从分层中复制并构建镜像
FROM adoptopenjdk/openjdk11:latest
WORKDIR /application
# 从上面构建的builder 中复制层  注意保证层的顺序
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
# jvm读取的是这个地区，否则定时任务相差8小时
RUN echo "Asia/Shanghai" > /etc/timezone
EXPOSE 8787
# 配置
ENV JAVA_OPTS="-Xmx128m -Xms128m" \
    SPRING_PROFILES_ACTIVE="dev"

ENTRYPOINT ["sh","-c", "java $JAVA_OPTS org.springframework.boot.loader.JarLauncher"]